/**
 * 
 * electron-build使用electron-updater采用NSIS方式，丢弃了Squirrel  https://www.electron.build/configuration/squirrel-windows.html
 * https://www.npmjs.com/package/electron-updater
 * 因为使用的electron-build打包，所以采用electron-updater采用NSIS方式
 * 
 * 注意：
 * 官方最新版也集成自动更新对象也anto-updater使用Squirrel，切勿混淆！！！
 * https://www.electronjs.org/zh/docs/latest/api/auto-updater
 * https://www.electronjs.org/zh/docs/latest/tutorial/updates
 */
const { app, dialog } = require('electron')
const { autoUpdater } = require('electron-updater')
const logger = require("electron-log")

let mainWindow = null;

autoUpdater.logger = logger
autoUpdater.autoDownload = false

//https://blog.csdn.net/weixin_45538554/article/details/125537296
//https://www.electron.build/configuration/publish.html
//autoUpdater.setFeedURL('http://127.0.0.1:9991/update/win32/');

autoUpdater.on('error', (error) => {
    //dialog.showErrorBox('Error: ', error == null ? "unknown" : (error.stack || error).toString())
    dialog.showMessageBox({
        type: 'error',
        title: '软件更新',
        message: '软件更新失败,请联系管理员！错误码：'+ (error.stack || error).toString()
    })
})

autoUpdater.on('update-available', () => {
    dialog.showMessageBox({
        type: 'info',
        title: '软件更新',
        message: '发现新版本，是否下载更新?',
        buttons: ['确定', '取消'],
    }).then((resp: any) => {
        if (resp.response === 0) {
            autoUpdater.downloadUpdate()
        }
    })
})

autoUpdater.on('update-not-available', () => {
    dialog.showMessageBox({
        title: '软件更新',
        message: '当前版本已经是最新版本.'
    })
})

autoUpdater.on('download-progress', res => {
    logger.info("下载监听:" + res)
    mainWindow.webContents.send('downloadProgress', res)
})

autoUpdater.on('update-downloaded', () => {
    const options = {
        type: 'info',
        buttons: ['确定', '取消'],
        title: '软件更新',
        message: '下载完成，是否马上更新？'
    }
    dialog.showMessageBox(options).then(returnVal => {
        if (returnVal.response === 0) {
            setTimeout(() => {
                autoUpdater.quitAndInstall()
            }, 1000)
        } else {
            return
        }
    })
})

// export this func
function checkForUpdates(win) {
    mainWindow = win;
    autoUpdater.checkForUpdates()
}

export {
    checkForUpdates
}

